home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0155_ANIVGA Horizontal Expand Fade.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  2KB  |  64 lines

  1. {
  2. I went ahead and wrote a fade_HorizontalExpand using Kai
  3. Rohrbacher's fade_VerticalExpand as a guide.  The fade was too slow, so I
  4. reduced the detailed inner loop and had the clean-up complete the effect.
  5. }
  6. PROCEDURE HorizontalExpand(pa, time: WORD);                          { JH }
  7. { in: pa    = page, which contents will be made visible }
  8. {     time  = time (in milliseconds) for this action (approx.) }
  9. {out: - }
  10. {rem: the contents of page "pa" has been copied to page visualPage }
  11. {jh "n" was (YMAX+1)*(YMAX+1) DIV 8 = 5000}
  12. CONST n = 2000; {number of executions of the delay loop}
  13. VAR ClockTicks:^LONGINT;
  14.     counter: WORD;
  15.     t: LONGINT;
  16.     temp, middle, step, akku: REAL;
  17.     lines, x: INTEGER;
  18.  
  19.    PROCEDURE CopyLine(from, dest: WORD);
  20.    { in: from = to duplicate line from page pa}
  21.    {     dest = endline in page visualPage differ}
  22.    VAR p1:POINTER;
  23.    BEGIN
  24.      p1 := GetImage(from+StartVirtualX,StartVirtualY,
  25.                     from+StartVirtualX,StartVirtualY+YMAX,pa);
  26.      PutImage(dest+StartVirtualX,StartVirtualY,p1, 1-Page); {jh visualPage}
  27.      FreeImageMem(p1);
  28.    END;  {CopyLine}
  29.  
  30. BEGIN
  31.  ClockTicks := Ptr(Seg0040,$6C);
  32.  t := ClockTicks^;
  33.  counter := 0;
  34.  temp := 0.0182*time/n;
  35.  
  36.  middle := XMAX/2;
  37.  {jh FOR lines := 1 TO ((XMAX+1) SHR 1)-1 DO =159}
  38.  FOR lines := 1 TO 99 DO
  39.   BEGIN
  40.    step := XMAX/(lines SHL 1);
  41.    akku := step;
  42.    FOR x := 0 TO lines-1 DO
  43.     BEGIN  {jh The SHR 1 handling is for only two Copylines at a time}
  44.      CopyLine( TRUNC(middle-akku),(XMAX+1) SHR 1 -x-1);
  45.      CopyLine( TRUNC(middle+akku),(XMAX+1) SHR 1 +x);
  46.      akku := akku + step;
  47.      INC(counter);
  48.      WHILE (ClockTicks^ < (t+counter*temp)) DO BEGIN END;
  49.     END;
  50.   END;
  51.  
  52.  {Cleanup:}
  53.  lines := XMAX SHR 1;
  54.  FOR x := 0 TO XMAX SHR 1 DO
  55.   BEGIN
  56.    CopyLine( lines-x,lines-x);
  57.    CopyLine( lines+x,lines+x);
  58.    INC(counter);
  59.    WHILE (ClockTicks^ < (t+counter*temp)) DO BEGIN END;
  60.   END;
  61.  IF Odd(XMAX)
  62.   THEN CopyLine(XMAX,XMAX);
  63. END;  {HorizontalExpand}
  64.